package com.hera.process.web.primefaces.controller;
import java.io.IOException;
import java.util.List;

import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import javax.faces.context.FacesContext;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

import com.hera.base.util.Constantes;
import com.hera.base.util.FiltroDTO;
import com.hera.process.config.rest.delegate.WorkflowDelegate;
import com.hera.process.security.domain.User;
import com.hera.process.workflow.domain.TaskInstanceCache;

@Component
@SessionScoped
@ManagedBean
public class BandejaController {
	@Autowired
	public WorkflowDelegate workflowDelegate;
	/**
	 * lista de tareas de usuario
	 */
	private List<TaskInstanceCache> listado;
	/**
	 * variable entera para conocer el tipo de bandeja
	 */
	private int tipoBandeja;
	
	
	 
	
	/**
	 * Metodo para cargar la bandeja de entrada
	 */
	public void cargarBandejaEntrada(){
		
		 try {
			 mostrarDatos(1);
			 FacesContext.getCurrentInstance().getExternalContext().redirect("bandeja.xhtml");
			 
		} catch (IOException e) {
			
			e.printStackTrace();
		}
	}
	/**
	 * Metodo para cargar la bandeja de usuarios
	 */
	public void cargarBandejaUsuarios(){
		 try {
			 mostrarDatos(2);
			 FacesContext.getCurrentInstance().getExternalContext().redirect("bandeja.xhtml");
		} catch (IOException e) {
			
			e.printStackTrace();
		}
	}
	/**
	 * Metodo para cargar  la bandeja de solicitados
	 */
	public void cargarBandejaSolicitado(){
		 try {
			 mostrarDatos(3);
			FacesContext.getCurrentInstance().getExternalContext().redirect("bandeja.xhtml");
		} catch (IOException e) {
			
			e.printStackTrace();
		}
	}
	/**
	 * Metodo para cargar la bandeja de borrador
	 */
	public void cargarBandejaBorrador(){
		 try {
			 mostrarDatos(4);
			FacesContext.getCurrentInstance().getExternalContext().redirect("bandeja.xhtml");
		} catch (IOException e) {
			
			e.printStackTrace();
		}
	}
	/**
	 * Metodo para cargar la bandeja de eliminados
	 */
	public void cargarBandejaEliminados(){
		 try {
			 mostrarDatos(5);
			FacesContext.getCurrentInstance().getExternalContext().redirect("bandeja.xhtml");
		} catch (IOException e) {
			
			e.printStackTrace();
		}
	}
	
	
	/**
	 * @param bandeja
	 * @return
	 *  listado de tareas de usuario para obtener la bandeja dependiendo del parametro.
	 */
	public List<TaskInstanceCache> mostrarDatos(Integer bandeja){
		FiltroDTO filtroDTO = new FiltroDTO();
		tipoBandeja=bandeja;
		
		Long session=((User)FacesContext.getCurrentInstance().getExternalContext().getSessionMap().get(Constantes.USUARIO.SESSION_NAME)).getIdUser();
		
	if(Constantes.BANDEJA.ENTRADA == bandeja) {
		//filtroDTO.addParametro("user.idUser",session);
		//listado = workflowDelegate.findAllTaskUsers(filtroDTO);		
		filtroDTO.addParametro("currentUser1",session);
		listado = workflowDelegate.findAllTaskInstanceCaches(filtroDTO);
		System.out.println("bandeja 1");
	} else if(Constantes.BANDEJA.USUARIO == bandeja) {
		//listado=workflowDelegate.findBandejaUsuario(session);
		System.out.println("bandeja 2");
	}else if(Constantes.BANDEJA.SOLICITADO==bandeja){
		filtroDTO.addParametro("currentUser1",session);
		filtroDTO.addParametro("idStatus", Constantes.ESTADOTAREA.PENDIENTE);
		listado = workflowDelegate.findAllTaskInstanceCaches(filtroDTO);
		System.out.println("bandeja 3");
	}else if(Constantes.BANDEJA.BORRADOR==bandeja){
		filtroDTO.addParametro("currentUser1",session);
		filtroDTO.addParametro("idStatus", Constantes.ESTADOTAREA.BORRADOR);
		listado = workflowDelegate.findAllTaskInstanceCaches(filtroDTO);		
		System.out.println("bandeja 4");
	}
	else if(Constantes.BANDEJA.ELIMINADO==bandeja){
		filtroDTO.addParametro("currentUser1",session);
		filtroDTO.addParametro("idStatus", Constantes.ESTADOTAREA.CANCELADO);
		listado = workflowDelegate.findAllTaskInstanceCaches(filtroDTO);		
		System.out.println("bandeja 5");
	}

	return listado;
	
	}
	
	public List<TaskInstanceCache> getListado() {
		return mostrarDatos(tipoBandeja);
	}
	public void setListado(List<TaskInstanceCache> listado) {
		this.listado = listado;
	}
	public int getTipoBandeja() {
		return tipoBandeja;
	}
	public void setTipoBandeja(int tipoBandeja) {
		this.tipoBandeja = tipoBandeja;
	}
	
	public String detail(){	
		System.out.println("ir al detalle");
		return "detail_task";	
	}



}
